昨天學習到了JSX的幾大特色與優點之後,今天就正式來學習用JSX搭配react。載入JSX之前先引用babel-core這個JSX的編譯器。
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
載入JSX有兩種方式:
<script type="text/babel">
</script>
<script type="text/jsx" src="test.jsx"></script>
以下用官網的範例作為練習:
function formatName(user) {
return user.firstName+ ' ' + user.lastName;
}
const user = {
firstName: '陳',
lastName: '小羽'
};
// 產生h1的react元素
const element = (
<h1>
Hello, {formatName(user)}!
</h1>
);
// 將react元素渲染到html架構裡
ReactDOM.render(
element,
document.getElementById('app')
);
JSX同樣可以做到如HTML標籤上的屬性設置,但要注意class和for為Javascript的保留關鍵用字,若要設定的話請用className和htmlFor取代。
<div className="greeting">
<p>Hello {formatName(user)}</p>
<label htmlFor="name"><input type="text" id="name"/></label>
<img src="" alt="" />
</div>
另外需要注意下列兩點:
<div>
標籤。<input>
或<img>
的話,需要自行加上'/'關閉標籤。const element = (
/*
多行
註解
*/
// 單行註解
<content
/*
多行
註解
*/
name={formatName(user)}// 單行註解
/>
);
在JSX中若要引用CSS樣式的話,用兩個{}包住,第一個{}是JSX 語法,第二個為JavaScript物件,命名方式為駝峰式命名法,多個樣式要引用的話用','做區隔。
<div className="greeting" style={{fontSize:'36px',fontWeight:'bold'}}>
<p>Hello {formatName(user)}</p>
</div>